home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / demo-versionen / maxoncpp4-demo / demo / supercode / main.c < prev    next >
C/C++ Source or Header  |  1996-12-31  |  5KB  |  218 lines

  1. //-------------------------------------
  2. //
  3. // SuperCode (c) 1996 by T.Kühn 
  4. //
  5. // Programmiersprache:    ANSI-C
  6. // Projektstart:            12.7.94
  7. //
  8. // Modul:                Main
  9. //
  10. //-------------------------------------
  11.  
  12.  
  13.  
  14. //-------------------------------------
  15. #include <pragma/exec_lib.h>
  16. #include <pragma/dos_lib.h>
  17. #include <pragma/intuition_lib.h>
  18. #include <exec/memory.h>
  19.  
  20. #include <stdarg.h>
  21. #include <wbstartup.h>
  22.  
  23. #include <Struct.h>
  24.  
  25. //-------------------------------------
  26.  
  27. BOOL        exit_flag;
  28. ULONG        Memory_Strt,Memory_Ende;
  29.  
  30. BOOL
  31.     init_lib=FALSE,
  32.     init_loc=FALSE,
  33.     init_prefs=FALSE,
  34.     init_class=FALSE,
  35.     init_msg=FALSE,
  36.     init_super=FALSE,
  37.     init_menu=FALSE,
  38.     init_scrn=FALSE,
  39.     init_code=FALSE,
  40.     init_score=FALSE;
  41.  
  42.  
  43. //-------------------------------------
  44. void Exit_All()
  45. {
  46.     exit_flag=TRUE;
  47.  
  48.     if (init_score)    score_free();
  49.     if (init_super)    supercode_free();
  50.     if (init_prefs)    prefs_free();
  51.     if (init_menu)        Menu_Free();
  52.     if (init_scrn)        Screen_Close(&Scrn);
  53.     if (init_class)    Class_Free();
  54.     if (init_msg )        MsgPort_Free();
  55.     if (init_code)        code_free();
  56.     if (init_loc)        loc_free();
  57.     if (init_lib )        Lib_Free();
  58.  
  59.     Memory_Ende=AvailMem(MEMF_PUBLIC);
  60.     if ( (Memory_Strt-Memory_Ende)!=0 )
  61.     {
  62.         Printf("Warning !!!\nProgramm lost %ld bytes of Memory !!!\n",Memory_Strt-Memory_Ende);
  63.         Delay(50);
  64.     }
  65.  
  66.     exit(0);
  67. }
  68. //-------------------------------------
  69.  
  70.  
  71. //-------------------------------------
  72. ULONG display_errorA(ULONG error,ULONG ask,ULONG *args)
  73. {
  74. #define MAX_TXT    (80)
  75.     ULONG back =ASK_CONT;
  76.  
  77.     if (error)
  78.     {
  79.         struct EasyStruct easy=
  80.         {
  81.             sizeof (struct EasyStruct),
  82.             0,
  83.             CatStr(TXT_ERR_TITLE),
  84.             (error<TXT_END) ? CatStr(error) : (UBYTE*) error,
  85.             0,
  86.         };
  87.         UBYTE txt[MAX_TXT+2];
  88.         ULONG max=0,ask_res[ASK_END];
  89.  
  90.         txt[0]=0;
  91.         if (ask & ASK_YES)        {ask_res[++max]=ASK_YES;    if (max>1) StrAdd(txt,"|",MAX_TXT); StrAdd(txt,CatStr(TXT_ERR_YES),MAX_TXT);     }
  92.         if (ask & ASK_OK)            {ask_res[++max]=ASK_OK;        if (max>1) StrAdd(txt,"|",MAX_TXT); StrAdd(txt,CatStr(TXT_ERR_OK),MAX_TXT);     }
  93.         if (ask & ASK_AGAIN)        {ask_res[++max]=ASK_AGAIN;    if (max>1) StrAdd(txt,"|",MAX_TXT); StrAdd(txt,CatStr(TXT_ERR_AGAIN),MAX_TXT); }
  94.         if (ask & ASK_CONT)        {ask_res[++max]=ASK_CONT;    if (max>1) StrAdd(txt,"|",MAX_TXT); StrAdd(txt,CatStr(TXT_ERR_CONT),MAX_TXT);     }
  95.         if (ask & ASK_SAVE)        {ask_res[++max]=ASK_SAVE;    if (max>1) StrAdd(txt,"|",MAX_TXT); StrAdd(txt,CatStr(TXT_ERR_SAVE),MAX_TXT);     }
  96.         if (ask & ASK_SELECT)    {ask_res[++max]=ASK_SELECT;if (max>1) StrAdd(txt,"|",MAX_TXT); StrAdd(txt,CatStr(TXT_ERR_SELECT),MAX_TXT);}
  97.         if (ask & ASK_ABORT)        {ask_res[++max]=ASK_ABORT;    if (max>1) StrAdd(txt,"|",MAX_TXT); StrAdd(txt,CatStr(TXT_ERR_ABORT),MAX_TXT); }
  98.         if (ask & ASK_EXIT)        {ask_res[++max]=ASK_EXIT;    if (max>1) StrAdd(txt,"|",MAX_TXT); StrAdd(txt,CatStr(TXT_ERR_EXIT),MAX_TXT);     }
  99.         if (ask & ASK_NO)            {ask_res[++max]=ASK_NO;        if (max>1) StrAdd(txt,"|",MAX_TXT); StrAdd(txt,CatStr(TXT_ERR_NO),MAX_TXT);     }
  100.  
  101.         easy.es_GadgetFormat=txt;
  102.  
  103.         if (max>0)
  104.         {
  105.             ask_res[0]=ask_res[max];
  106.  
  107.             if (IntuitionBase) back=ask_res[EasyRequestArgs(0,&easy,0,args)];
  108.             else Exit_All();
  109.  
  110.             if (back==ASK_EXIT) Exit_All();
  111.  
  112.             if (back==ASK_CONT)
  113.             {
  114.                 easy.es_TextFormat=CatStr(TXT_CONT);
  115.                 easy.es_GadgetFormat=CatStr(TXT_CONTANS);
  116.                 if (0==EasyRequestArgs(0,&easy,0,0)) Exit_All();
  117.             }
  118.         }
  119.     }
  120.  
  121.     return back;
  122. }
  123. //-------------------------------------
  124. ULONG display_error(ULONG error,ULONG ask ...)
  125. {
  126.     ULONG back;
  127.     va_list args;
  128.     va_start(args,ask);
  129.  
  130.     back=display_errorA(error,ask,(ULONG*)args);
  131.  
  132.     va_end(args);
  133.     return back;
  134. }
  135. //-------------------------------------
  136.  
  137.  
  138. //-------------------------------------
  139. void Quit()
  140. {
  141.     LONG res;
  142.  
  143.     if (!player1.finish && player1.started)
  144.     {
  145.         res=display_error((ULONG)CatStr(TXT_MAINQUITSAVE),ASK_YES|ASK_ABORT|ASK_SAVE);
  146.     }
  147.     else
  148.     {
  149.         res=display_error((ULONG)CatStr(TXT_MAINQUIT),ASK_YES|ASK_ABORT);
  150.     }
  151.  
  152.     switch (res)
  153.     {
  154.         case ASK_SAVE:
  155.             supercode_savegame();
  156.         case ASK_YES:
  157.             Exit_All();
  158.             break;
  159.     }
  160. }
  161. //-------------------------------------
  162. void main()
  163. {
  164.     exit_flag=TRUE;
  165.     Memory_Strt=AvailMem(MEMF_PUBLIC);
  166.  
  167.     init_lib=TRUE;
  168.     Lib_Init();
  169.  
  170.     init_loc=TRUE;
  171.     loc_init(0);
  172.  
  173.     init_prefs=TRUE;
  174.     prefs_init();
  175.  
  176.     init_code=TRUE;
  177.     code_init();
  178.  
  179.     init_class=TRUE;
  180.     Class_Init();
  181.  
  182.     init_msg=TRUE;
  183.     MsgPort_Init();
  184.  
  185.     init_score=TRUE;
  186.     score_init();
  187.  
  188.     init_menu=TRUE;    // !!! Das ist nicht PASCAL oder MODULA '=' anstatt ':=' !!!
  189.     Menu_Init();
  190.  
  191.     init_scrn=TRUE;
  192.     Screen_Init(&Scrn);
  193.     Screen_Open(&Scrn);
  194.  
  195.     init_super=TRUE;
  196.     supercode_init();
  197.  
  198.     supercode_open();
  199.     exit_flag=FALSE;
  200.  
  201.     supercode_about();
  202. //    supercode_newplayer();
  203.  
  204.     while(TRUE)
  205.     {
  206.         while(TRUE)
  207.         {
  208.             supercode_domsg();
  209.             score_domsg();
  210.             prefs_domsg();
  211.             wait_mask(supercode_getbit() | score_getbit() | prefs_getbit());
  212.         }
  213.         Quit();
  214.     }
  215. }
  216. //-------------------------------------
  217.  
  218.